// RAP [rh] quick access disabled
///*******************************************************************************
// * Copyright (c) 2005, 2010 IBM Corporation and others.
// * All rights reserved. This program and the accompanying materials
// * are made available under the terms of the Eclipse Public License v1.0
// * which accompanies this distribution, and is available at
// * http://www.eclipse.org/legal/epl-v10.html
// *
// * Contributors:
// *     IBM Corporation - initial API and implementation
// *******************************************************************************/
//package org.eclipse.ui.internal.quickaccess;
//
//import java.util.ArrayList;
//import java.util.HashMap;
//import java.util.Iterator;
//import java.util.LinkedList;
//import java.util.List;
//import java.util.Map;
//import org.eclipse.core.commands.Command;
//import org.eclipse.core.runtime.Assert;
//import org.eclipse.jface.bindings.TriggerSequence;
//import org.eclipse.jface.bindings.keys.KeySequence;
//import org.eclipse.jface.bindings.keys.SWTKeySupport;
//import org.eclipse.jface.dialogs.IDialogSettings;
//import org.eclipse.jface.dialogs.PopupDialog;
//import org.eclipse.jface.layout.GridDataFactory;
//import org.eclipse.jface.layout.GridLayoutFactory;
//import org.eclipse.jface.layout.TableColumnLayout;
//import org.eclipse.jface.resource.FontDescriptor;
//import org.eclipse.jface.resource.ImageDescriptor;
//import org.eclipse.jface.resource.JFaceResources;
//import org.eclipse.jface.resource.LocalResourceManager;
//import org.eclipse.jface.util.Util;
//import org.eclipse.jface.viewers.ColumnWeightData;
//import org.eclipse.osgi.util.NLS;
//import org.eclipse.swt.SWT;
//import org.eclipse.swt.custom.BusyIndicator;
//import org.eclipse.swt.events.ControlAdapter;
//import org.eclipse.swt.events.ControlEvent;
//import org.eclipse.swt.events.KeyAdapter;
//import org.eclipse.swt.events.KeyEvent;
//import org.eclipse.swt.events.KeyListener;
//import org.eclipse.swt.events.ModifyEvent;
//import org.eclipse.swt.events.ModifyListener;
//import org.eclipse.swt.events.MouseAdapter;
//import org.eclipse.swt.events.MouseEvent;
//import org.eclipse.swt.events.MouseMoveListener;
//import org.eclipse.swt.events.SelectionEvent;
//import org.eclipse.swt.events.SelectionListener;
//import org.eclipse.swt.graphics.Color;
//import org.eclipse.swt.graphics.Font;
//import org.eclipse.swt.graphics.Point;
//import org.eclipse.swt.graphics.Rectangle;
//import org.eclipse.swt.graphics.TextLayout;
//import org.eclipse.swt.graphics.TextStyle;
//import org.eclipse.swt.widgets.Composite;
//import org.eclipse.swt.widgets.Control;
//import org.eclipse.swt.widgets.Event;
//import org.eclipse.swt.widgets.Listener;
//import org.eclipse.swt.widgets.Shell;
//import org.eclipse.swt.widgets.Table;
//import org.eclipse.swt.widgets.TableColumn;
//import org.eclipse.swt.widgets.TableItem;
//import org.eclipse.swt.widgets.Text;
//import org.eclipse.ui.IWorkbenchPreferenceConstants;
//import org.eclipse.ui.IWorkbenchWindow;
//import org.eclipse.ui.PlatformUI;
//import org.eclipse.ui.internal.IWorkbenchGraphicConstants;
//import org.eclipse.ui.internal.WorkbenchImages;
//import org.eclipse.ui.internal.WorkbenchPlugin;
//import org.eclipse.ui.internal.progress.ProgressManagerUtil;
//import org.eclipse.ui.keys.IBindingService;
//import org.eclipse.ui.themes.ColorUtil;
//
//
///**
// * @since 3.3
// * 
// */
//public class QuickAccessDialog extends PopupDialog {
//	private static final int INITIAL_COUNT_PER_PROVIDER = 5;
//	private static final int MAX_COUNT_TOTAL = 20;
//
//	protected Text filterText;
//
//	private QuickAccessProvider[] providers;
//	private IWorkbenchWindow window;
//
//	protected Table table;
//
//	private LocalResourceManager resourceManager = new LocalResourceManager(
//			JFaceResources.getResources());
//
//	private static final String TEXT_ARRAY = "textArray"; //$NON-NLS-1$
//	private static final String TEXT_ENTRIES = "textEntries"; //$NON-NLS-1$
//	private static final String ORDERED_PROVIDERS = "orderedProviders"; //$NON-NLS-1$
//	private static final String ORDERED_ELEMENTS = "orderedElements"; //$NON-NLS-1$
//	static final int MAXIMUM_NUMBER_OF_ELEMENTS = 60;
//	static final int MAXIMUM_NUMBER_OF_TEXT_ENTRIES_PER_ELEMENT = 3;
//
//	protected String rememberedText;
//
//	protected Map textMap = new HashMap();
//
//	protected Map elementMap = new HashMap();
//
//	private LinkedList previousPicksList = new LinkedList();
//
//	protected Map providerMap;
//	// private Font italicsFont;
//	private Color grayColor;
//	private TextLayout textLayout;
//	private TriggerSequence[] invokingCommandKeySequences;
//	private Command invokingCommand;
//	private KeyAdapter keyAdapter;
//	private boolean showAllMatches = false;
//	protected boolean resized = false;
//
//
//	public QuickAccessDialog(IWorkbenchWindow window, final Command invokingCommand) {
//		super(ProgressManagerUtil.getDefaultParent(), SWT.RESIZE, true, true, // persist size
//				false, // but not location
//				true, true, null,
//				QuickAccessMessages.QuickAccess_StartTypingToFindMatches);
//
//		this.window = window;
//		BusyIndicator.showWhile(window.getShell() == null ? null : window
//				.getShell().getDisplay(), new Runnable() {
//			public void run() {
//				QuickAccessDialog.this.providers = new QuickAccessProvider[] {
//						new PreviousPicksProvider(), new EditorProvider(),
//						new ViewProvider(), new PerspectiveProvider(),
//						new CommandProvider(), new ActionProvider(),
//						new WizardProvider(), new PreferenceProvider(),
//						new PropertiesProvider() };
//				providerMap = new HashMap();
//				for (int i = 0; i < providers.length; i++) {
//					providerMap.put(providers[i].getId(), providers[i]);
//				}
//				restoreDialog();
//				QuickAccessDialog.this.invokingCommand = invokingCommand;
//				if (QuickAccessDialog.this.invokingCommand != null
//						&& !QuickAccessDialog.this.invokingCommand.isDefined()) {
//					QuickAccessDialog.this.invokingCommand = null;
//				} else {
//					// Pre-fetch key sequence - do not change because scope will
//					// change later.
//					getInvokingCommandKeySequences();
//				}
//				// create early
//				create();
//			}
//		});
//		// Ugly hack to avoid bug 184045. If this gets fixed, replace the
//		// following code with a call to refresh("").
//		getShell().getDisplay().asyncExec(new Runnable() {
//			public void run() {
//				final Shell shell = getShell();
//				if (shell != null && !shell.isDisposed()) {
//					Point size = shell.getSize();
//					shell.setSize(size.x, size.y + 1);
//				}
//			}
//		});
//	}
//
//	protected Control createTitleControl(Composite parent) {
//		filterText = new Text(parent, SWT.NONE);
//
//		GridDataFactory.fillDefaults().align(SWT.FILL, SWT.CENTER).grab(true, false)
//				.applyTo(filterText);
//
//		filterText.addKeyListener(getKeyAdapter());
//		filterText.addKeyListener(new KeyListener() {
//			public void keyPressed(KeyEvent e) {
//				switch (e.keyCode) {
//				case SWT.CR:
//				case SWT.KEYPAD_CR:
//					handleSelection();
//					break;
//				case SWT.ARROW_DOWN:
//					int index = table.getSelectionIndex();
//					if (index != -1 && table.getItemCount() > index + 1) {
//						table.setSelection(index + 1);
//					}
//					table.setFocus();
//					break;
//				case SWT.ARROW_UP:
//					index = table.getSelectionIndex();
//					if (index != -1 && index >= 1) {
//						table.setSelection(index - 1);
//						table.setFocus();
//					}
//					break;
//				case SWT.ESC:
//					close();
//					break;
//				}
//			}
//
//			public void keyReleased(KeyEvent e) {
//				// do nothing
//			}
//		});
//		filterText.addModifyListener(new ModifyListener() {
//			public void modifyText(ModifyEvent e) {
//				String text = ((Text) e.widget).getText().toLowerCase();
//				refresh(text);
//			}
//		});
//
//		return filterText;
//	}
//
//	/*
//	 * (non-Javadoc)
//	 * 
//	 * @see org.eclipse.jface.dialogs.PopupDialog#createDialogArea(org.eclipse.swt.widgets.Composite)
//	 */
//	protected Control createDialogArea(Composite parent) {
//		Composite composite = (Composite) super.createDialogArea(parent);
//		boolean isWin32 = Util.isWindows();
//		GridLayoutFactory.fillDefaults().extendedMargins(isWin32 ? 0 : 3, 3, 2, 2).applyTo(composite);
//		Composite tableComposite = new Composite(composite, SWT.NONE);
//		GridDataFactory.fillDefaults().grab(true, true).applyTo(tableComposite);
//		TableColumnLayout tableColumnLayout = new TableColumnLayout();
//		tableComposite.setLayout(tableColumnLayout);
//		table = new Table(tableComposite, SWT.SINGLE | SWT.FULL_SELECTION);
//		textLayout = new TextLayout(table.getDisplay());
//		textLayout.setOrientation(getDefaultOrientation());
//		Font boldFont = resourceManager.createFont(FontDescriptor.createFrom(
//				JFaceResources.getDialogFont()).setStyle(SWT.BOLD));
//		textLayout.setFont(table.getFont());
//		textLayout.setText(QuickAccessMessages.QuickAccess_AvailableCategories);
//		int maxProviderWidth = (int) (textLayout.getBounds().width * 1.1);
//		textLayout.setFont(boldFont);
//		for (int i = 0; i < providers.length; i++) {
//			QuickAccessProvider provider = providers[i];
//			textLayout.setText(provider.getName());
//			int width = (int) (textLayout.getBounds().width * 1.1);
//			if (width > maxProviderWidth) {
//				maxProviderWidth = width;
//			}
//		}
//		tableColumnLayout.setColumnData(new TableColumn(table, SWT.NONE),
//				new ColumnWeightData(0, maxProviderWidth));
//		tableColumnLayout.setColumnData(new TableColumn(table, SWT.NONE),
//				new ColumnWeightData(100, 100));
//		table.getShell().addControlListener(new ControlAdapter() {
//			public void controlResized(ControlEvent e) {
//				if (!showAllMatches) {
//					if (!resized) {
//						resized = true;
//						e.display.timerExec(100, new Runnable() {
//							public void run() {
//								if (getShell() != null
//										&& !getShell().isDisposed()) {
//									refresh(filterText.getText().toLowerCase());
//								}
//								resized = false;
//							}
//						});
//					}
//				}
//			}
//		});
//
//		table.addKeyListener(getKeyAdapter());
//		table.addKeyListener(new KeyListener() {
//			public void keyPressed(KeyEvent e) {
//				if (e.keyCode == SWT.ARROW_UP && table.getSelectionIndex() == 0) {
//					filterText.setFocus();
//				} else if (e.character == SWT.ESC) {
//					close();
//				}
//			}
//
//			public void keyReleased(KeyEvent e) {
//				// do nothing
//			}
//		});
//		table.addMouseListener(new MouseAdapter() {
//			public void mouseUp(MouseEvent e) {
//
//				if (table.getSelectionCount() < 1)
//					return;
//
//				if (e.button != 1)
//					return;
//
//				if (table.equals(e.getSource())) {
//					Object o= table.getItem(new Point(e.x, e.y));
//					TableItem selection= table.getSelection()[0];
//					if (selection.equals(o))
//						handleSelection();
//				}
//			}
//		});
//		table.addMouseMoveListener(new MouseMoveListener() {
//			TableItem lastItem = null;
//
//			public void mouseMove(MouseEvent e) {
//				if (table.equals(e.getSource())) {
//					Object o = table.getItem(new Point(e.x, e.y));
//					if (lastItem == null ^ o == null) {
//						table.setCursor(o == null ? null : table.getDisplay().getSystemCursor(
//								SWT.CURSOR_HAND));
//					}
//					if (o instanceof TableItem) {
//						if (!o.equals(lastItem)) {
//							lastItem = (TableItem) o;
//							table.setSelection(new TableItem[] { lastItem });
//						}
//					} else if (o == null) {
//						lastItem = null;
//					}
//				}
//			}
//		});
//
//		table.addSelectionListener(new SelectionListener() {
//			public void widgetSelected(SelectionEvent e) {
//				// do nothing
//			}
//
//			public void widgetDefaultSelected(SelectionEvent e) {
//				handleSelection();
//			}
//		});
//
//
//		final TextStyle boldStyle;
//		if (PlatformUI.getPreferenceStore().getBoolean(IWorkbenchPreferenceConstants.USE_COLORED_LABELS)) {
//			boldStyle = new TextStyle(boldFont, null, null);
//			// italicsFont = resourceManager.createFont(FontDescriptor.createFrom(
//			// table.getFont()).setStyle(SWT.ITALIC));
//			grayColor = resourceManager.createColor(ColorUtil.blend(table
//					.getBackground().getRGB(), table.getForeground().getRGB()));
//		} else {
//			boldStyle = null;
//		}
//		Listener listener = new Listener() {
//			public void handleEvent(Event event) {
//				QuickAccessEntry entry = (QuickAccessEntry) event.item
//						.getData();
//				if (entry != null) {
//					switch (event.type) {
//					case SWT.MeasureItem:
//						entry.measure(event, textLayout, resourceManager,
//								boldStyle);
//						break;
//					case SWT.PaintItem:
//						entry.paint(event, textLayout, resourceManager,
//								boldStyle, grayColor);
//						break;
//					case SWT.EraseItem:
//						entry.erase(event);
//						break;
//					}
//				}
//			}
//		};
//		table.addListener(SWT.MeasureItem, listener);
//		table.addListener(SWT.EraseItem, listener);
//		table.addListener(SWT.PaintItem, listener);
//				
//		return composite;
//	}
//
//	/**
//	 * 
//	 */
//	private int computeNumberOfItems() {
//		Rectangle rect = table.getClientArea ();
//		int itemHeight = table.getItemHeight ();
//		int headerHeight = table.getHeaderHeight ();
//		return (rect.height - headerHeight + itemHeight - 1) / (itemHeight + table.getGridLineWidth());
//	}
//
//	/**
//	 * 
//	 */
//	private void refresh(String filter) {
//		int numItems = computeNumberOfItems();
//
//		// perfect match, to be selected in the table if not null
//		QuickAccessElement perfectMatch = (QuickAccessElement) elementMap
//				.get(filter);
//
//		List[] entries = computeMatchingEntries(filter, perfectMatch, numItems);
//
//		int selectionIndex = refreshTable(perfectMatch, entries);
//
//		if (table.getItemCount() > 0) {
//			table.setSelection(selectionIndex);
//		} else if (filter.length() == 0) {
//			{
//				TableItem item = new TableItem(table, SWT.NONE);
//				item.setText(0,
//						QuickAccessMessages.QuickAccess_AvailableCategories);
//				item.setForeground(0, grayColor);
//			}
//			for (int i = 0; i < providers.length; i++) {
//				QuickAccessProvider provider = providers[i];
//				TableItem item = new TableItem(table, SWT.NONE);
//				item.setText(1, provider.getName());
//				item.setForeground(1, grayColor);
//			}
//		}
//
//		if (filter.length() == 0) {
//			setInfoText(QuickAccessMessages.QuickAccess_StartTypingToFindMatches);
//		} else {
//			TriggerSequence[] sequences = getInvokingCommandKeySequences();
//			if (showAllMatches || sequences == null || sequences.length == 0) {
//				setInfoText(""); //$NON-NLS-1$
//			} else {
//				setInfoText(NLS
//						.bind(
//								QuickAccessMessages.QuickAccess_PressKeyToShowAllMatches,
//								sequences[0].format()));
//			}
//		}
//	}
//
//	final protected TriggerSequence[] getInvokingCommandKeySequences() {
//		if (invokingCommandKeySequences == null) {
//			if (invokingCommand != null) {
//				IBindingService bindingService = (IBindingService) window
//						.getWorkbench().getAdapter(IBindingService.class);
//				invokingCommandKeySequences = bindingService
//						.getActiveBindingsFor(invokingCommand.getId());
//			}
//		}
//		return invokingCommandKeySequences;
//	}
//
//	private KeyAdapter getKeyAdapter() {
//		if (keyAdapter == null) {
//			keyAdapter = new KeyAdapter() {
//				public void keyPressed(KeyEvent e) {
//					int accelerator = SWTKeySupport
//							.convertEventToUnmodifiedAccelerator(e);
//					KeySequence keySequence = KeySequence
//							.getInstance(SWTKeySupport
//									.convertAcceleratorToKeyStroke(accelerator));
//					TriggerSequence[] sequences = getInvokingCommandKeySequences();
//					if (sequences == null)
//						return;
//					for (int i = 0; i < sequences.length; i++) {
//						if (sequences[i].equals(keySequence)) {
//							e.doit = false;
//							toggleShowAllMatches();
//							return;
//						}
//					}
//				}
//			};
//		}
//		return keyAdapter;
//	}
//
//	protected void toggleShowAllMatches() {
//		showAllMatches = !showAllMatches;
//		refresh(filterText.getText().toLowerCase());
//	}
//
//	private int refreshTable(QuickAccessElement perfectMatch, List[] entries) {
//		if (table.getItemCount() > entries.length
//				&& table.getItemCount() - entries.length > 20) {
//			table.removeAll();
//		}
//		TableItem[] items = table.getItems();
//		int selectionIndex = -1;
//		int index = 0;
//		for (int i = 0; i < providers.length; i++) {
//			if (entries[i] != null) {
//				boolean firstEntry = true;
//				for (Iterator it = entries[i].iterator(); it.hasNext();) {
//					QuickAccessEntry entry = (QuickAccessEntry) it.next();
//					entry.firstInCategory = firstEntry;
//					firstEntry = false;
//					if (!it.hasNext()) {
//						entry.lastInCategory = true;
//					}
//					TableItem item;
//					if (index < items.length) {
//						item = items[index];
//						table.clear(index);
//					} else {
//						item = new TableItem(table, SWT.NONE);
//					}
//					if (perfectMatch == entry.element && selectionIndex == -1) {
//						selectionIndex = index;
//					}
//					item.setData(entry);
//					item.setText(0, entry.provider.getName());
//					item.setText(1, entry.element.getLabel());
//					if (Util.isWpf()) {
//						item.setImage(1, entry.getImage(entry.element,
//							resourceManager));
//					}
//					index++;
//				}
//			}
//		}
//		if (index < items.length) {
//			table.remove(index, items.length - 1);
//		}
//		if (selectionIndex == -1) {
//			selectionIndex = 0;
//		}
//		return selectionIndex;
//	}
//
//	private List[] computeMatchingEntries(String filter,
//			QuickAccessElement perfectMatch, int maxCount) {
//		// collect matches in an array of lists
//		List[] entries = new ArrayList[providers.length];
//		int[] indexPerProvider = new int[providers.length];
//		int countPerProvider = Math.min(maxCount / 4,
//				INITIAL_COUNT_PER_PROVIDER);
//		int countTotal = 0;
//		boolean perfectMatchAdded = true;
//		if (perfectMatch != null) {
//			// reserve one entry for the perfect match
//			maxCount--;
//			perfectMatchAdded = false;
//		}
//		boolean done;
//		do {
//			// will be set to false if we find a provider with remaining
//			// elements
//			done = true;
//			for (int i = 0; i < providers.length
//					&& (showAllMatches || countTotal < maxCount); i++) {
//				if (entries[i] == null) {
//					entries[i] = new ArrayList();
//					indexPerProvider[i] = 0;
//				}
//				int count = 0;
//				QuickAccessProvider provider = providers[i];
//				if (filter.length() > 0
//						|| provider instanceof PreviousPicksProvider
//						|| showAllMatches) {
//					QuickAccessElement[] elements = provider
//							.getElementsSorted();
//					int j = indexPerProvider[i];
//					while (j < elements.length
//							&& (showAllMatches || (count < countPerProvider && countTotal < maxCount))) {
//						QuickAccessElement element = elements[j];
//						QuickAccessEntry entry;
//						if (filter.length() == 0) {
//							if (i == 0 || showAllMatches) {
//								entry = new QuickAccessEntry(element, provider,
//										new int[0][0], new int[0][0]);
//							} else {
//								entry = null;
//							}
//						} else {
//							entry = element.match(filter, provider);
//						}
//						if (entry != null) {
//							entries[i].add(entry);
//							count++;
//							countTotal++;
//							if (i == 0 && entry.element == perfectMatch) {
//								perfectMatchAdded = true;
//								maxCount = MAX_COUNT_TOTAL;
//							}
//						}
//						j++;
//					}
//					indexPerProvider[i] = j;
//					if (j < elements.length) {
//						done = false;
//					}
//				}
//			}
//			// from now on, add one element per provider
//			countPerProvider = 1;
//		} while ((showAllMatches || countTotal < maxCount) && !done);
//		if (!perfectMatchAdded) {
//			QuickAccessEntry entry = perfectMatch.match(filter, providers[0]);
//			if (entry != null) {
//				if (entries[0] == null) {
//					entries[0] = new ArrayList();
//					indexPerProvider[0] = 0;
//				}
//				entries[0].add(entry);
//			}
//		}
//		return entries;
//	}
//
//	protected Control getFocusControl() {
//		return filterText;
//	}
//
//	public boolean close() {
//		storeDialog(getDialogSettings());
//		if (textLayout != null && !textLayout.isDisposed()) {
//			textLayout.dispose();
//		}
//		if (resourceManager != null) {
//			resourceManager.dispose();
//			resourceManager = null;
//		}
//		return super.close();
//	}
//
//	protected Point getDefaultSize() {
//		return new Point(350, 420);
//	}
//
//	protected Point getDefaultLocation(Point initialSize) {
//		Point size = new Point(400, 400);
//		Rectangle parentBounds = getParentShell().getBounds();
//		int x = parentBounds.x + parentBounds.width / 2 - size.x / 2;
//		int y = parentBounds.y + parentBounds.height / 2 - size.y / 2;
//		return new Point(x, y);
//	}
//
//	protected IDialogSettings getDialogSettings() {
//		final IDialogSettings workbenchDialogSettings = WorkbenchPlugin
//				.getDefault().getDialogSettings();
//		IDialogSettings result = workbenchDialogSettings.getSection(getId());
//		if (result == null) {
//			result = workbenchDialogSettings.addNewSection(getId());
//		}
//		return result;
//	}
//
//	protected String getId() {
//		return "org.eclipse.ui.internal.QuickAccess"; //$NON-NLS-1$
//	}
//
//	private void storeDialog(IDialogSettings dialogSettings) {
//		String[] orderedElements = new String[previousPicksList.size()];
//		String[] orderedProviders = new String[previousPicksList.size()];
//		String[] textEntries = new String[previousPicksList.size()];
//		ArrayList arrayList = new ArrayList();
//		for (int i = 0; i < orderedElements.length; i++) {
//			QuickAccessElement quickAccessElement = (QuickAccessElement) previousPicksList
//					.get(i);
//			ArrayList elementText = (ArrayList) textMap.get(quickAccessElement);
//			Assert.isNotNull(elementText);
//			orderedElements[i] = quickAccessElement.getId();
//			orderedProviders[i] = quickAccessElement.getProvider().getId();
//			arrayList.addAll(elementText);
//			textEntries[i] = elementText.size() + ""; //$NON-NLS-1$
//		}
//		String[] textArray = (String[]) arrayList.toArray(new String[arrayList
//				.size()]);
//		dialogSettings.put(ORDERED_ELEMENTS, orderedElements);
//		dialogSettings.put(ORDERED_PROVIDERS, orderedProviders);
//		dialogSettings.put(TEXT_ENTRIES, textEntries);
//		dialogSettings.put(TEXT_ARRAY, textArray);
//	}
//
//	private void restoreDialog() {
//		IDialogSettings dialogSettings = getDialogSettings();
//		if (dialogSettings != null) {
//			String[] orderedElements = dialogSettings
//					.getArray(ORDERED_ELEMENTS);
//			String[] orderedProviders = dialogSettings
//					.getArray(ORDERED_PROVIDERS);
//			String[] textEntries = dialogSettings.getArray(TEXT_ENTRIES);
//			String[] textArray = dialogSettings.getArray(TEXT_ARRAY);
//			elementMap = new HashMap();
//			textMap = new HashMap();
//			previousPicksList = new LinkedList();
//			if (orderedElements != null && orderedProviders != null
//					&& textEntries != null && textArray != null) {
//				int arrayIndex = 0;
//				for (int i = 0; i < orderedElements.length; i++) {
//					QuickAccessProvider quickAccessProvider = (QuickAccessProvider) providerMap
//							.get(orderedProviders[i]);
//					int numTexts = Integer.parseInt(textEntries[i]);
//					if (quickAccessProvider != null) {
//						QuickAccessElement quickAccessElement = quickAccessProvider
//								.getElementForId(orderedElements[i]);
//						if (quickAccessElement != null) {
//							ArrayList arrayList = new ArrayList();
//							for (int j = arrayIndex; j < arrayIndex + numTexts; j++) {
//								String text = textArray[j];
//								// text length can be zero for old workspaces, see bug 190006
//								if (text.length() > 0) {
//									arrayList.add(text);
//									elementMap.put(text, quickAccessElement);
//								}
//							}
//							textMap.put(quickAccessElement, arrayList);
//							previousPicksList.add(quickAccessElement);
//						}
//					}
//					arrayIndex += numTexts;
//				}
//			}
//		}
//	}
//
//	protected void handleElementSelected(String text, Object selectedElement) {
//		if (selectedElement instanceof QuickAccessElement) {
//			addPreviousPick(text, selectedElement);
//			storeDialog(getDialogSettings());
//			QuickAccessElement element = (QuickAccessElement) selectedElement;
//			element.execute();
//		}
//	}
//
//	/**
//	 * @param element
//	 */
//	private void addPreviousPick(String text, Object element) {
//		// previousPicksList:
//		// Remove element from previousPicksList so there are no duplicates
//		// If list is max size, remove last(oldest) element
//		// Remove entries for removed element from elementMap and textMap
//		// Add element to front of previousPicksList
//		previousPicksList.remove(element);
//		if (previousPicksList.size() == MAXIMUM_NUMBER_OF_ELEMENTS) {
//			Object removedElement = previousPicksList.removeLast();
//			ArrayList removedList = (ArrayList) textMap.remove(removedElement);
//			for (int i = 0; i < removedList.size(); i++) {
//				elementMap.remove(removedList.get(i));
//			}
//		}
//		previousPicksList.addFirst(element);
//
//		// textMap:
//		// Get list of strings for element from textMap
//		// Create new list for element if there isn't one and put
//		// element->textList in textMap
//		// Remove rememberedText from list
//		// If list is max size, remove first(oldest) string
//		// Remove text from elementMap
//		// Add rememberedText to list of strings for element in textMap
//		ArrayList textList = (ArrayList) textMap.get(element);
//		if (textList == null) {
//			textList = new ArrayList();
//			textMap.put(element, textList);
//		}
//		
//		textList.remove(text);
//		if (textList.size() == MAXIMUM_NUMBER_OF_TEXT_ENTRIES_PER_ELEMENT) {
//			Object removedText = textList.remove(0);
//			elementMap.remove(removedText);
//		}
//
//		if (text.length() > 0) {
//			textList.add(text);
//			
//			// elementMap:
//			// Put rememberedText->element in elementMap
//			// If it replaced a different element update textMap and
//			// PreviousPicksList
//			Object replacedElement = elementMap.put(text, element);
//			if (replacedElement != null && !replacedElement.equals(element)) {
//				textList = (ArrayList) textMap.get(replacedElement);
//				if (textList != null) {
//					textList.remove(text);
//					if (textList.isEmpty()) {
//						textMap.remove(replacedElement);
//						previousPicksList.remove(replacedElement);
//					}
//				}
//			}
//		}
//	}
//
//	/**
//	 * 
//	 */
//	private void handleSelection() {
//		QuickAccessElement selectedElement = null;
//		String text = filterText.getText().toLowerCase();
//		if (table.getSelectionCount() == 1) {
//			QuickAccessEntry entry = (QuickAccessEntry) table
//					.getSelection()[0].getData();
//			selectedElement = entry == null ? null : entry.element;
//		}
//		close();
//		if (selectedElement != null) {
//			handleElementSelected(text, selectedElement);
//		}
//	}
//
//	private class PreviousPicksProvider extends QuickAccessProvider {
//
//		public QuickAccessElement getElementForId(String id) {
//			return null;
//		}
//
//		public QuickAccessElement[] getElements() {
//			return (QuickAccessElement[]) previousPicksList
//					.toArray(new QuickAccessElement[previousPicksList.size()]);
//		}
//
//		public QuickAccessElement[] getElementsSorted() {
//			return getElements();
//		}
//
//		public String getId() {
//			return "org.eclipse.ui.previousPicks"; //$NON-NLS-1$
//		}
//
//		public ImageDescriptor getImageDescriptor() {
//			return WorkbenchImages
//					.getImageDescriptor(IWorkbenchGraphicConstants.IMG_OBJ_NODE);
//		}
//
//		public String getName() {
//			return QuickAccessMessages.QuickAccess_Previous;
//		}
//	}
//
//}
